# Makefile.am -- Backtrace in libstdc++ Makefile.
# Copyright (C) 2012-2024 Free Software Foundation, Inc.

# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:

#     (1) Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer. 

#     (2) Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in
#     the documentation and/or other materials provided with the
#     distribution.  

#     (3) The name of the author may not be used to
#     endorse or promote products derived from this software without
#     specific prior written permission.

# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.

include $(top_srcdir)/fragment.am

# Convenience library for C++23 runtime.
noinst_LTLIBRARIES = libstdc++_libbacktrace.la

ACLOCAL_AMFLAGS = -I ../.. -I ../../config

# This will be used instead of the common AM_CPPFLAGS from fragment.am
libstdc___libbacktrace_la_CPPFLAGS = \
	-I $(top_srcdir)/../include -I $(top_srcdir)/../libgcc \
	-I ../../../libgcc -I .. -I $(top_srcdir) \
	-I $(top_srcdir)/../libbacktrace \
	-I $(top_srcdir)/../libiberty \
	-include $(top_srcdir)/src/libbacktrace/backtrace-rename.h \
	$(BACKTRACE_CPPFLAGS)

WARN_FLAGS = -W -Wall -Wwrite-strings -Wmissing-format-attribute \
	     -Wcast-qual
C_WARN_FLAGS = $(WARN_FLAGS) -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -Wno-unused-but-set-variable
CXX_WARN_FLAGS = $(WARN_FLAGS) -Wno-unused-parameter
AM_CFLAGS = \
	$(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \
	$(C_WARN_FLAGS) -funwind-tables
AM_CFLAGS += $(EXTRA_CFLAGS)
AM_CXXFLAGS = \
	$(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \
	$(CXX_WARN_FLAGS) -fno-rtti -fno-exceptions
AM_CXXFLAGS += $(EXTRA_CXXFLAGS)

obj_prefix = std_stacktrace

# Each FILE.c in SOURCES will be compiled to SHORTNAME-FILE.o
libstdc___libbacktrace_la_SHORTNAME = $(obj_prefix)

libstdc___libbacktrace_la_SOURCES = \
	atomic.c \
	backtrace.c \
	dwarf.c \
	fileline.c \
	posix.c \
	sort.c \
	simple.c \
	state.c \
	cp-demangle.c

FORMAT_FILES = \
	elf.c \
	pecoff.c \
	unknown.c

VIEW_FILES = \
	read.c \
	mmapio.c

ALLOC_FILES = \
	alloc.c \
	mmap.c

EXTRA_libstdc___libbacktrace_la_SOURCES = \
	$(FORMAT_FILES) \
	$(VIEW_FILES) \
	$(ALLOC_FILES)

# These three files are chosen by configure and added to the link.
# We need the SHORTNAME- prefix so that they use the custom CPPFLAGS above.
libstdc___libbacktrace_la_LIBADD = \
	$(obj_prefix)-$(FORMAT_FILE) \
	$(obj_prefix)-$(VIEW_FILE) \
	$(obj_prefix)-$(ALLOC_FILE)

libstdc___libbacktrace_la_DEPENDENCIES = $(libstdc___libbacktrace_la_LIBADD)

# Use symlinks for the sources

%.c: ../../../libbacktrace/%.c
	$(LN_S) $< $@

cp-demangle.c: ../../../libiberty/cp-demangle.c
	$(LN_S) $< $@

LTCOMPILE = \
	$(LIBTOOL) --tag CC --tag disable-shared \
	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=compile $(CC) $(TOPLEVEL_INCLUDES) \
	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)

LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))

LINK = \
	$(LIBTOOL) --tag CC --tag disable-shared \
	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=link $(CC) \
	$(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CFLAGS) $(LTLDFLAGS) -o $@
